'''
    05
    Controller层
    主要负责接收客户端的请求
    响应数据
    提供API接口
'''
from fastapi import FastAPI, APIRouter
import crud
from database import SessionLocal, Base, engine
from sqlalchemy.orm import Session
from fastapi import Depends
import schema
import uvicorn

# 会创建所有继承Base 类的表格
Base.metadata.create_all(bind=engine)

app = FastAPI(title="员工管理API接口")

'''
    Session的连接的创建构建成一个依赖项
    是一个嵌套依赖：需要的是返回一个SessionLocal的对象，用我之后销毁

    return: 执行return语句后函数完全结束了
    yield: 返回值在调用者调用后还会继续执行
'''


def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()


@app.get("/emps/")
async def get_emps(db: Session = Depends(get_db)):
    return crud.get_all_emp(db)


@app.post("/emp/add/")
async def add_emp(emp: schema.EmpSchema, db: Session = Depends(get_db)):
    emp1 = crud.get_emp_by_empno(db=db, empno=emp.empno)
    if emp1:
        return {"message": "员工编号已经存在"}
    return crud.add_emp(db, emp)


@app.post("/emp/update/")
async def update_emp(emp: schema.EmpSchema, db: Session = Depends(get_db)):
    emp1 = crud.get_emp_by_empno(db=db, empno=emp.empno)
    if not emp1:
        return {"message": "要修改的员工不存在"}
    return crud.update_emp(db=db, emp_schema=emp)


@app.get("/emp/delete/")
async def update_emp(empno: int, db: Session = Depends(get_db)):
    emp1 = crud.get_emp_by_empno(db=db, empno=empno)
    if not emp1:
        return {"message": "要删除的员工不存在"}
    return crud.del_emp(db=db, empno=empno)


if __name__ == '__main__':
    uvicorn.run("stu_controller:app", host="localhost", port=8001, reload=True)